package main

import (
	Router "ginDemo/1_demo/allRouter"
	"ginDemo/1_demo/chapter05"

	"github.com/gin-gonic/gin"
)

func Hello(ctx *gin.Context) {
	// ctx.String(200, "hello new gin")
	name := "hello"
	ctx.HTML(200, "index/index.html", name)
}

func User(ctx *gin.Context) {
	ctx.HTML(200, "user/user.html", nil)
}

func main() {

	router := gin.Default() //打印出警告那些,日志和恢复,类似flask中app
	// router := gin.New() // 不会打印出警告那些
	// 这个方法可以使用中间件,中间件加在哪，哪会自动调用
	router.Use(chapter05.MiddleWare1)

	// （1）创建路由， api对应的处理函数
	// router.GET("/user", Hello)

	// （2）模板文件
	router.LoadHTMLGlob("./template/**/*") // 只要指定文件夹, 多级文件夹，三级/**/**/*,但是其他的文件也需要符合这个规则进行嵌套
	// router.LoadHTMLFiles("index.html") // 指定单个文件

	// （3）静态文件
	router.Static("/static", "static") // 1.参数：路由名，静态文件要调用，也得使用静态名   2.参数：文件路径
	Router.Router(router)

	/* ================================================================================================================ */
	/* 下面的是传统的路由 */
	/* ================================================================================================================ */

	// 路由组
	// v1 := router.Group("/v1")
	// {
	// 	v1.GET("/", chapter01.Hello)
	// }

	// 因为这样子写路由会越来越大，版本也会不一样，所以引入路由组进行抽离
	// router.GET("/", chapter01.Hello)

	// v2 := router.Group("/v2")
	// {
	// 	v2.GET("/user", chapter02.User)
	// }
	// router.GET("/user", chapter02.User)
	// router.GET("/user_struct", chapter02.UserInfoStruct)
	// router.GET("/arr", chapter02.ArrController)
	// router.GET("/arr_struct", chapter02.ArrStruct)
	// router.GET("/map", chapter02.MapController)
	// router.GET("/map_struct", chapter02.MapStruct)

	// // 带参数路由
	// // http://localhost:9000/param1/123,,,无参数会匹配不到
	// router.GET("/param1/:id", chapter02.Param1)
	// // 带星号会自动获取到路由前面的/,,,/123，，，有无参数都可以匹配
	// router.GET("/param2/*id", chapter02.Param2)

	// //用参数名key的方式获取参数
	// // http: //localhost:9000/query?id=123
	// router.GET("/query", chapter02.GetQueryData)
	// // http://localhost:9000/query_arr?id=12,32,21,65
	// router.GET("/query_arr", chapter02.GetQueryArrData)
	// // http://localhost:9000/query_map?user[id]=1&user[name]=wjf
	// router.GET("/query_map", chapter02.GetMapData)

	// // post请求
	// router.GET("/to_user_add", chapter02.ToUserAdd)
	// router.POST("/do_user_add", chapter02.DoUserAdd)

	// // DefaultPostForm请求
	// router.GET("/to_user_add2", chapter02.ToUserAdd2)
	// router.POST("/do_user_add2", chapter02.DoUserAdd2)

	// // ajax请求
	// router.GET("/to_user_add3", chapter02.ToUserAdd3)
	// router.POST("/do_user_add3", chapter02.DoUserAdd3)

	// // 参数绑定
	// router.GET("/to_user_add4", chapter02.ToUserAdd4)
	// router.POST("/do_user_add4", chapter02.DoUserAdd4)

	// // 表单文件传输
	// router.GET("/test_to_upload1", chapter02.ToUpload1)
	// router.POST("/test_do_upload1", chapter02.DoUpload1)

	// // 表多文件传输
	// router.GET("/test_to_upload2", chapter02.ToUpload2)
	// router.POST("/test_do_upload2", chapter02.DoUpload2)

	// // ajax单文件
	// // 表多文件传输
	// router.GET("/test_to_upload3", chapter02.ToUploadFile3)
	// router.POST("/test_do_upload3", chapter02.DoUploadFile3)

	// // form数据绑定
	// router.GET("/to_bind_form", chapter04.ToBindForm)
	// router.POST("do_bind_form", chapter04.DoBindForm)

	// // query_string数据绑定, 这个数据类型，是获取路由上url的参数值
	// // http://localhost:9000/bind_query_string?name=vick&age=18&addr=xxxxx
	// router.GET("/bind_query_string", chapter04.BindQueryString)

	// // json数据绑定
	// router.GET("/to_bind_json", chapter04.ToBindJion)
	// router.POST("do_bind_json", chapter04.DoBindJson)

	// // uri数据绑定
	// // http://localhost:9000/bind_uri/hell/19/xxx
	// router.GET("/bind_uri/:name/:age/:addr", chapter04.BindUri)

	// // 数据校验
	// router.GET("/to_valid", chapter04.ToValidData)
	// router.POST("/do_valid", chapter04.DoValidData)

	// 启动程序,修改端口号
	router.Run(":9000")
}
